#############################################################################
# Accton
#
# Module contains an implementation of SONiC PSU Base API and
# provides the PSUs status which are available in the platform
#
#############################################################################

import os.path

try:
    from sonic_psu.psu_base import PsuBase
except ImportError as e:
    raise ImportError(str(e) + "- required module not found")


class PsuUtil(PsuBase):
    """Platform-specific PSUutil class"""

    def __init__(self):
        PsuBase.__init__(self)

        self.psu_path = "/sys/bus/i2c/devices/"
        self.psu_presence = "/psu_present"
        self.psu_oper_status = "/psu_power_good"
        self.psu_mapping = {
            1: ["11-0038", "11-0050"],
            2: ["12-003b", "12-0053"],
        }

    def get_num_psus(self):
        return len(self.psu_mapping)

    def get_psu_status(self, index):
        if index is None:
            return False

        status = 0
        lst = self.psu_mapping[index]
        for i in lst:
            node = self.psu_path + i + self.psu_oper_status
            try:
                with open(node, 'r') as power_status:
                    status += int(power_status.read())
            except IOError:
                return False

        return status > 0

    def get_psu_presence(self, index):
        if index is None:
            return False

        status = 0
        lst = self.psu_mapping[index]
        for i in lst:
            node = self.psu_path + i + self.psu_presence
            try:
                with open(node, 'r') as presence_status:
                    status += int(presence_status.read())
            except IOError:
                return False

        return status > 0
